/**
 * 权限工具函数
 */

/**
 * 检查当前用户是否具有某个角色
 * @param {String} role - 角色编码
 * @returns {Boolean} 是否有权限
 */
export const hasRole = (role) => {
    const userRoles = uni.getStorageSync('userRoles');
    if (!userRoles || !Array.isArray(userRoles) || userRoles.length === 0) {
        return false;
    }
    return userRoles.includes(role);
};

/**
 * 检查当前用户是否具有任意一个指定角色
 * @param {Array<String>} roles - 角色编码列表
 * @returns {Boolean} 是否有权限
 */
export const hasAnyRole = (roles) => {
    const userRoles = uni.getStorageSync('userRoles');
    if (!userRoles || !Array.isArray(userRoles) || userRoles.length === 0) {
        return false;
    }
    return roles.some(role => userRoles.includes(role));
};

/**
 * 检查当前用户是否具有所有指定角色
 * @param {Array<String>} roles - 角色编码列表
 * @returns {Boolean} 是否有权限
 */
export const hasAllRoles = (roles) => {
    const userRoles = uni.getStorageSync('userRoles');
    if (!userRoles || !Array.isArray(userRoles) || userRoles.length === 0) {
        return false;
    }
    return roles.every(role => userRoles.includes(role));
};

/**
 * 检查当前用户是否是管理员
 * @returns {Boolean} 是否是管理员
 */
export const isAdmin = () => {
    return hasRole('ROLE_ADMIN');
};

/**
 * 检查当前用户是否是客服
 * @returns {Boolean} 是否是客服
 */
export const isCustomerService = () => {
    return hasRole('ROLE_CUSTOMER_SERVICE');
};

/**
 * 重定向到无权限页面
 */
export const redirectToNoPermission = () => {
    uni.showToast({
        title: '您没有权限访问此页面',
        icon: 'none',
        duration: 2000
    });
    setTimeout(() => {
        uni.reLaunch({
            url: '/pages/login/login'
        });
    }, 2000);
};

export default {
    hasRole,
    hasAnyRole,
    hasAllRoles,
    isAdmin,
    isCustomerService,
    redirectToNoPermission
}; 